package cn.lkk.samples.lang.inheritance;

/**
 * 演示final关键字，包括
 * 1. final 类：不能继承的类，其中的方法都是 final的
 * 2. final 方法：不能覆盖的方法
 * 3. final 字段：在构造方法调用之后必须有初始值，而且不能再改变
 * 4. final 变量：只能初始化一次，可以先定义，然后初始化，始终只能赋值一次
 */
public final class FinalKeyWord {

    //类常量
    public static final int ClassID;
    //对象常量
    public final String name;

    //任何常量都必须进行初始化，静态常量可以直接赋值或者通过静态初始化块赋值
    static{
        ClassID =1;
    }

    public FinalKeyWord(String name) {
        this.name = name;
    }

    public final String getDescription(){
        return "final方法不能覆盖";
    }

    public void setValue(final int key){
        final int val;
        val=19;

        //final字段只能赋值一次，以下声明都是错误的
        //val=11;
        //key=12;
    }
}

/**
 * 继承一个 final 类是非法的
 */
//class ExtendedClass extends FinalKeyWord{
//
//}